// $ANTLR 3.5 C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g 2013-02-03 17:41:26

      package Antlr;
      import AST.*;
      import bool.*;
      import command.*;
      import dec.*;
      import expression.*;      


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class logo3Parser extends Parser {
	public static final String[] tokenNames = new String[] {
		"<invalid>", "<EOR>", "<DOWN>", "<UP>", "BREAK", "CALL", "CAR", "CATCH", 
		"CCLOSE", "CDR", "COMMA", "CONS", "COPEN", "ELSE", "FALSE", "FOR", "FUN", 
		"FUNREC", "IF", "Ident", "MOVE", "NIL", "Num", "Op", "PAIR", "PENDOWN", 
		"PENUP", "PROC", "PROCREC", "PT", "REPEAT", "THEN", "THROW", "TRUE", "TRY", 
		"TURN", "VAR", "WHILE", "WS", "'!'", "'&'", "'('", "')'", "':'", "'::'", 
		"':='", "'='", "'?('", "'NOT'"
	};
	public static final int EOF=-1;
	public static final int T__39=39;
	public static final int T__40=40;
	public static final int T__41=41;
	public static final int T__42=42;
	public static final int T__43=43;
	public static final int T__44=44;
	public static final int T__45=45;
	public static final int T__46=46;
	public static final int T__47=47;
	public static final int T__48=48;
	public static final int BREAK=4;
	public static final int CALL=5;
	public static final int CAR=6;
	public static final int CATCH=7;
	public static final int CCLOSE=8;
	public static final int CDR=9;
	public static final int COMMA=10;
	public static final int CONS=11;
	public static final int COPEN=12;
	public static final int ELSE=13;
	public static final int FALSE=14;
	public static final int FOR=15;
	public static final int FUN=16;
	public static final int FUNREC=17;
	public static final int IF=18;
	public static final int Ident=19;
	public static final int MOVE=20;
	public static final int NIL=21;
	public static final int Num=22;
	public static final int Op=23;
	public static final int PAIR=24;
	public static final int PENDOWN=25;
	public static final int PENUP=26;
	public static final int PROC=27;
	public static final int PROCREC=28;
	public static final int PT=29;
	public static final int REPEAT=30;
	public static final int THEN=31;
	public static final int THROW=32;
	public static final int TRUE=33;
	public static final int TRY=34;
	public static final int TURN=35;
	public static final int VAR=36;
	public static final int WHILE=37;
	public static final int WS=38;

	// delegates
	public Parser[] getDelegates() {
		return new Parser[] {};
	}

	// delegators


	public logo3Parser(TokenStream input) {
		this(input, new RecognizerSharedState());
	}
	public logo3Parser(TokenStream input, RecognizerSharedState state) {
		super(input, state);
	}

	@Override public String[] getTokenNames() { return logo3Parser.tokenNames; }
	@Override public String getGrammarFileName() { return "C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g"; }



	// $ANTLR start "start"
	// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:55:1: start returns [Start result] : prog EOF ;
	public final Start start() throws  {
		Start result = null;


		Prog prog1 =null;

		try {
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:55:29: ( prog EOF )
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:56:3: prog EOF
			{
			pushFollow(FOLLOW_prog_in_start419);
			prog1=prog();
			state._fsp--;

			match(input,EOF,FOLLOW_EOF_in_start421); 
			 result = new Start(prog1); 
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return result;
	}
	// $ANTLR end "start"



	// $ANTLR start "prog"
	// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:58:1: prog returns [Prog result] : COPEN commands CCLOSE ;
	public final Prog prog() throws  {
		Prog result = null;


		Commands commands2 =null;

		try {
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:58:28: ( COPEN commands CCLOSE )
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:59:3: COPEN commands CCLOSE
			{
			match(input,COPEN,FOLLOW_COPEN_in_prog465); 
			pushFollow(FOLLOW_commands_in_prog467);
			commands2=commands();
			state._fsp--;

			match(input,CCLOSE,FOLLOW_CCLOSE_in_prog469); 
			 result = new Prog(commands2); 
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return result;
	}
	// $ANTLR end "prog"



	// $ANTLR start "commands"
	// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:61:1: commands returns [Commands result] : (| command ( COMMA cmds= commands )? );
	public final Commands commands() throws  {
		Commands result = null;


		Commands cmds =null;
		Command command3 =null;

		try {
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:61:35: (| command ( COMMA cmds= commands )? )
			int alt2=2;
			int LA2_0 = input.LA(1);
			if ( (LA2_0==CCLOSE) ) {
				alt2=1;
			}
			else if ( ((LA2_0 >= BREAK && LA2_0 <= CALL)||(LA2_0 >= FOR && LA2_0 <= MOVE)||(LA2_0 >= PENDOWN && LA2_0 <= REPEAT)||LA2_0==THROW||(LA2_0 >= TRY && LA2_0 <= WHILE)||LA2_0==39) ) {
				alt2=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 2, 0, input);
				throw nvae;
			}

			switch (alt2) {
				case 1 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:61:37: 
					{
					result = new Commands();
					}
					break;
				case 2 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:62:4: command ( COMMA cmds= commands )?
					{
					pushFollow(FOLLOW_command_in_commands503);
					command3=command();
					state._fsp--;

					result = new Commands(command3);
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:63:4: ( COMMA cmds= commands )?
					int alt1=2;
					int LA1_0 = input.LA(1);
					if ( (LA1_0==COMMA) ) {
						alt1=1;
					}
					switch (alt1) {
						case 1 :
							// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:63:5: COMMA cmds= commands
							{
							match(input,COMMA,FOLLOW_COMMA_in_commands527); 
							pushFollow(FOLLOW_commands_in_commands531);
							cmds=commands();
							state._fsp--;

							result.addCommands(cmds);
							}
							break;

					}

					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return result;
	}
	// $ANTLR end "commands"



	// $ANTLR start "command"
	// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:66:1: command returns [Command result] : ( MOVE expression | TURN expression | PENUP | PENDOWN | IF expression ifB= prog ( ELSE elseB= prog )? | WHILE expression prog ( Ident )? | dec | CALL Ident expressions | Ident ':=' expression | '!' Ident ':=' e1= expression | REPEAT expression prog ( Ident )? | FOR i1= Ident ';' exp= expression ';' exp2= expression prog (i2= Ident )? | THROW ( Ident )? | BREAK ( Ident )? | TRY t= prog CATCH ( Ident )? c= prog );
	public final Command command() throws  {
		Command result = null;


		Token i1=null;
		Token i2=null;
		Token Ident9=null;
		Token Ident11=null;
		Token Ident13=null;
		Token Ident15=null;
		Token Ident18=null;
		Token Ident20=null;
		Token Ident21=null;
		Token Ident22=null;
		Prog ifB =null;
		Prog elseB =null;
		IExpression e1 =null;
		IExpression exp =null;
		IExpression exp2 =null;
		Prog t =null;
		Prog c =null;
		IExpression expression4 =null;
		IExpression expression5 =null;
		IExpression expression6 =null;
		IExpression expression7 =null;
		Prog prog8 =null;
		Dec dec10 =null;
		Expressions expressions12 =null;
		IExpression expression14 =null;
		IExpression expression16 =null;
		Prog prog17 =null;
		Prog prog19 =null;

		try {
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:66:33: ( MOVE expression | TURN expression | PENUP | PENDOWN | IF expression ifB= prog ( ELSE elseB= prog )? | WHILE expression prog ( Ident )? | dec | CALL Ident expressions | Ident ':=' expression | '!' Ident ':=' e1= expression | REPEAT expression prog ( Ident )? | FOR i1= Ident ';' exp= expression ';' exp2= expression prog (i2= Ident )? | THROW ( Ident )? | BREAK ( Ident )? | TRY t= prog CATCH ( Ident )? c= prog )
			int alt10=15;
			switch ( input.LA(1) ) {
			case MOVE:
				{
				alt10=1;
				}
				break;
			case TURN:
				{
				alt10=2;
				}
				break;
			case PENUP:
				{
				alt10=3;
				}
				break;
			case PENDOWN:
				{
				alt10=4;
				}
				break;
			case IF:
				{
				alt10=5;
				}
				break;
			case WHILE:
				{
				alt10=6;
				}
				break;
			case FUN:
			case FUNREC:
			case PROC:
			case PROCREC:
			case PT:
			case VAR:
				{
				alt10=7;
				}
				break;
			case CALL:
				{
				alt10=8;
				}
				break;
			case Ident:
				{
				alt10=9;
				}
				break;
			case 39:
				{
				alt10=10;
				}
				break;
			case REPEAT:
				{
				alt10=11;
				}
				break;
			case FOR:
				{
				alt10=12;
				}
				break;
			case THROW:
				{
				alt10=13;
				}
				break;
			case BREAK:
				{
				alt10=14;
				}
				break;
			case TRY:
				{
				alt10=15;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 10, 0, input);
				throw nvae;
			}
			switch (alt10) {
				case 1 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:67:5: MOVE expression
					{
					match(input,MOVE,FOLLOW_MOVE_in_command570); 
					pushFollow(FOLLOW_expression_in_command572);
					expression4=expression();
					state._fsp--;

					result = new Move(expression4);
					}
					break;
				case 2 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:68:4: TURN expression
					{
					match(input,TURN,FOLLOW_TURN_in_command599); 
					pushFollow(FOLLOW_expression_in_command601);
					expression5=expression();
					state._fsp--;

					result = new Turn(expression5);
					}
					break;
				case 3 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:69:4: PENUP
					{
					match(input,PENUP,FOLLOW_PENUP_in_command626); 
					result = new Penup();
					}
					break;
				case 4 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:70:4: PENDOWN
					{
					match(input,PENDOWN,FOLLOW_PENDOWN_in_command661); 
					result = new Pendown();
					}
					break;
				case 5 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:71:4: IF expression ifB= prog ( ELSE elseB= prog )?
					{
					match(input,IF,FOLLOW_IF_in_command694); 
					pushFollow(FOLLOW_expression_in_command696);
					expression6=expression();
					state._fsp--;

					pushFollow(FOLLOW_prog_in_command700);
					ifB=prog();
					state._fsp--;

					result = new If(expression6,ifB, null);
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:72:8: ( ELSE elseB= prog )?
					int alt3=2;
					int LA3_0 = input.LA(1);
					if ( (LA3_0==ELSE) ) {
						alt3=1;
					}
					switch (alt3) {
						case 1 :
							// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:72:9: ELSE elseB= prog
							{
							match(input,ELSE,FOLLOW_ELSE_in_command724); 
							pushFollow(FOLLOW_prog_in_command728);
							elseB=prog();
							state._fsp--;

							((If)result).setElseBranch(elseB);
							}
							break;

					}

					}
					break;
				case 6 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:74:5: WHILE expression prog ( Ident )?
					{
					match(input,WHILE,FOLLOW_WHILE_in_command762); 
					pushFollow(FOLLOW_expression_in_command764);
					expression7=expression();
					state._fsp--;

					pushFollow(FOLLOW_prog_in_command766);
					prog8=prog();
					state._fsp--;

					result = new While(expression7, prog8); 
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:75:4: ( Ident )?
					int alt4=2;
					int LA4_0 = input.LA(1);
					if ( (LA4_0==Ident) ) {
						alt4=1;
					}
					switch (alt4) {
						case 1 :
							// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:75:5: Ident
							{
							Ident9=(Token)match(input,Ident,FOLLOW_Ident_in_command786); 
							((While)result).setName(Ident9.getText());
							}
							break;

					}

					}
					break;
				case 7 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:76:5: dec
					{
					pushFollow(FOLLOW_dec_in_command796);
					dec10=dec();
					state._fsp--;

					result = dec10;
					}
					break;
				case 8 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:77:5: CALL Ident expressions
					{
					match(input,CALL,FOLLOW_CALL_in_command834); 
					Ident11=(Token)match(input,Ident,FOLLOW_Ident_in_command836); 
					pushFollow(FOLLOW_expressions_in_command838);
					expressions12=expressions();
					state._fsp--;

					result = new Call(Ident11.getText(), expressions12);
					}
					break;
				case 9 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:78:5: Ident ':=' expression
					{
					Ident13=(Token)match(input,Ident,FOLLOW_Ident_in_command857); 
					match(input,45,FOLLOW_45_in_command859); 
					pushFollow(FOLLOW_expression_in_command861);
					expression14=expression();
					state._fsp--;

					result = new Affect(Ident13.getText(),expression14 );
					}
					break;
				case 10 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:79:5: '!' Ident ':=' e1= expression
					{
					match(input,39,FOLLOW_39_in_command882); 
					Ident15=(Token)match(input,Ident,FOLLOW_Ident_in_command884); 
					match(input,45,FOLLOW_45_in_command886); 
					pushFollow(FOLLOW_expression_in_command890);
					e1=expression();
					state._fsp--;

					result = new AffectPt(Ident15.getText(), e1);
					}
					break;
				case 11 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:80:5: REPEAT expression prog ( Ident )?
					{
					match(input,REPEAT,FOLLOW_REPEAT_in_command903); 
					pushFollow(FOLLOW_expression_in_command905);
					expression16=expression();
					state._fsp--;

					pushFollow(FOLLOW_prog_in_command907);
					prog17=prog();
					state._fsp--;

					result = new Repeat(expression16, prog17); 
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:81:4: ( Ident )?
					int alt5=2;
					int LA5_0 = input.LA(1);
					if ( (LA5_0==Ident) ) {
						alt5=1;
					}
					switch (alt5) {
						case 1 :
							// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:81:5: Ident
							{
							Ident18=(Token)match(input,Ident,FOLLOW_Ident_in_command926); 
							((Repeat)result).setName(Ident18.getText());
							}
							break;

					}

					}
					break;
				case 12 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:82:5: FOR i1= Ident ';' exp= expression ';' exp2= expression prog (i2= Ident )?
					{
					match(input,FOR,FOLLOW_FOR_in_command936); 
					i1=(Token)match(input,Ident,FOLLOW_Ident_in_command940); 
					match(input,COMMA,FOLLOW_COMMA_in_command942); 
					pushFollow(FOLLOW_expression_in_command946);
					exp=expression();
					state._fsp--;

					match(input,COMMA,FOLLOW_COMMA_in_command948); 
					pushFollow(FOLLOW_expression_in_command952);
					exp2=expression();
					state._fsp--;

					pushFollow(FOLLOW_prog_in_command954);
					prog19=prog();
					state._fsp--;

					result = new For(i1.getText(), exp, exp2, prog19); 
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:83:4: (i2= Ident )?
					int alt6=2;
					int LA6_0 = input.LA(1);
					if ( (LA6_0==Ident) ) {
						alt6=1;
					}
					switch (alt6) {
						case 1 :
							// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:83:5: i2= Ident
							{
							i2=(Token)match(input,Ident,FOLLOW_Ident_in_command966); 
							((For)result).setName(i2.getText());
							}
							break;

					}

					}
					break;
				case 13 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:84:5: THROW ( Ident )?
					{
					match(input,THROW,FOLLOW_THROW_in_command976); 
					result = new Throw();
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:85:4: ( Ident )?
					int alt7=2;
					int LA7_0 = input.LA(1);
					if ( (LA7_0==Ident) ) {
						alt7=1;
					}
					switch (alt7) {
						case 1 :
							// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:85:5: Ident
							{
							Ident20=(Token)match(input,Ident,FOLLOW_Ident_in_command988); 
							((Throw)result).setIdent(Ident20.getText());
							}
							break;

					}

					}
					break;
				case 14 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:86:5: BREAK ( Ident )?
					{
					match(input,BREAK,FOLLOW_BREAK_in_command1002); 
					result = new Break();
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:87:4: ( Ident )?
					int alt8=2;
					int LA8_0 = input.LA(1);
					if ( (LA8_0==Ident) ) {
						alt8=1;
					}
					switch (alt8) {
						case 1 :
							// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:87:5: Ident
							{
							Ident21=(Token)match(input,Ident,FOLLOW_Ident_in_command1014); 
							((Break)result).setIdent(Ident21.getText());
							}
							break;

					}

					}
					break;
				case 15 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:88:5: TRY t= prog CATCH ( Ident )? c= prog
					{
					match(input,TRY,FOLLOW_TRY_in_command1028); 
					String s=null;
					pushFollow(FOLLOW_prog_in_command1037);
					t=prog();
					state._fsp--;

					match(input,CATCH,FOLLOW_CATCH_in_command1043); 
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:90:10: ( Ident )?
					int alt9=2;
					int LA9_0 = input.LA(1);
					if ( (LA9_0==Ident) ) {
						alt9=1;
					}
					switch (alt9) {
						case 1 :
							// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:90:11: Ident
							{
							Ident22=(Token)match(input,Ident,FOLLOW_Ident_in_command1046); 
							s=Ident22.getText();
							}
							break;

					}

					pushFollow(FOLLOW_prog_in_command1057);
					c=prog();
					state._fsp--;

					result = new Try(s, t, c);
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return result;
	}
	// $ANTLR end "command"



	// $ANTLR start "expressions"
	// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:95:1: expressions returns [Expressions result] : (|e3= expression e= expressions );
	public final Expressions expressions() throws  {
		Expressions result = null;


		IExpression e3 =null;
		Expressions e =null;

		try {
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:95:41: (|e3= expression e= expressions )
			int alt11=2;
			int LA11_0 = input.LA(1);
			if ( (LA11_0==CCLOSE||LA11_0==COMMA||LA11_0==42) ) {
				alt11=1;
			}
			else if ( (LA11_0==CAR||LA11_0==CDR||LA11_0==CONS||LA11_0==FALSE||LA11_0==Ident||(LA11_0 >= NIL && LA11_0 <= Num)||LA11_0==PAIR||LA11_0==TRUE||(LA11_0 >= 39 && LA11_0 <= 40)||(LA11_0 >= 47 && LA11_0 <= 48)) ) {
				alt11=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 11, 0, input);
				throw nvae;
			}

			switch (alt11) {
				case 1 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:95:44: 
					{
					result = new Expressions();
					}
					break;
				case 2 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:96:5: e3= expression e= expressions
					{
					pushFollow(FOLLOW_expression_in_expressions1084);
					e3=expression();
					state._fsp--;

					result = new Expressions(); result.addExpression(e3);
					pushFollow(FOLLOW_expressions_in_expressions1122);
					e=expressions();
					state._fsp--;

					result.addExpressions(e);
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return result;
	}
	// $ANTLR end "expressions"



	// $ANTLR start "expression"
	// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:100:1: expression returns [IExpression result] : e2= expression_sub ( Op e3= expression )? ;
	public final IExpression expression() throws  {
		IExpression result = null;


		Token Op23=null;
		IExpression e2 =null;
		IExpression e3 =null;

		try {
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:100:40: (e2= expression_sub ( Op e3= expression )? )
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:101:2: e2= expression_sub ( Op e3= expression )?
			{
			pushFollow(FOLLOW_expression_sub_in_expression1173);
			e2=expression_sub();
			state._fsp--;

			result = e2;
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:102:3: ( Op e3= expression )?
			int alt12=2;
			int LA12_0 = input.LA(1);
			if ( (LA12_0==Op) ) {
				alt12=1;
			}
			switch (alt12) {
				case 1 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:102:4: Op e3= expression
					{
					Op23=(Token)match(input,Op,FOLLOW_Op_in_expression1182); 
					pushFollow(FOLLOW_expression_in_expression1186);
					e3=expression();
					state._fsp--;

					result = new OP(Op23.getText(), e2, e3);
					}
					break;

			}

			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return result;
	}
	// $ANTLR end "expression"



	// $ANTLR start "expression_sub"
	// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:107:1: expression_sub returns [IExpression result] : ( Num | Ident ( '(' e4= expressions ')' )? | '&' Ident | '!' Ident | TRUE | FALSE | 'NOT' e1= expression | NIL | CONS e1= expression '::' e2= expression | CAR e1= expression | CDR e1= expression | PAIR e1= expression | '?(' e1= expression ')' e2= expression ':' e3= expression );
	public final IExpression expression_sub() throws  {
		IExpression result = null;


		Token Num24=null;
		Token Ident25=null;
		Token Ident26=null;
		Token Ident27=null;
		Expressions e4 =null;
		IExpression e1 =null;
		IExpression e2 =null;
		IExpression e3 =null;

		try {
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:107:44: ( Num | Ident ( '(' e4= expressions ')' )? | '&' Ident | '!' Ident | TRUE | FALSE | 'NOT' e1= expression | NIL | CONS e1= expression '::' e2= expression | CAR e1= expression | CDR e1= expression | PAIR e1= expression | '?(' e1= expression ')' e2= expression ':' e3= expression )
			int alt14=13;
			switch ( input.LA(1) ) {
			case Num:
				{
				alt14=1;
				}
				break;
			case Ident:
				{
				alt14=2;
				}
				break;
			case 40:
				{
				alt14=3;
				}
				break;
			case 39:
				{
				alt14=4;
				}
				break;
			case TRUE:
				{
				alt14=5;
				}
				break;
			case FALSE:
				{
				alt14=6;
				}
				break;
			case 48:
				{
				alt14=7;
				}
				break;
			case NIL:
				{
				alt14=8;
				}
				break;
			case CONS:
				{
				alt14=9;
				}
				break;
			case CAR:
				{
				alt14=10;
				}
				break;
			case CDR:
				{
				alt14=11;
				}
				break;
			case PAIR:
				{
				alt14=12;
				}
				break;
			case 47:
				{
				alt14=13;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 14, 0, input);
				throw nvae;
			}
			switch (alt14) {
				case 1 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:108:4: Num
					{
					Num24=(Token)match(input,Num,FOLLOW_Num_in_expression_sub1213); 
					result = new Num(Num24.getText());
					}
					break;
				case 2 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:109:4: Ident ( '(' e4= expressions ')' )?
					{
					Ident25=(Token)match(input,Ident,FOLLOW_Ident_in_expression_sub1224); 
					result = new Ident(Ident25.getText());
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:110:3: ( '(' e4= expressions ')' )?
					int alt13=2;
					int LA13_0 = input.LA(1);
					if ( (LA13_0==41) ) {
						alt13=1;
					}
					switch (alt13) {
						case 1 :
							// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:110:4: '(' e4= expressions ')'
							{
							match(input,41,FOLLOW_41_in_expression_sub1234); 
							pushFollow(FOLLOW_expressions_in_expression_sub1237);
							e4=expressions();
							state._fsp--;

							match(input,42,FOLLOW_42_in_expression_sub1238); 
							result = new CallFun(Ident25.getText(), e4);
							}
							break;

					}

					}
					break;
				case 3 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:113:4: '&' Ident
					{
					match(input,40,FOLLOW_40_in_expression_sub1253); 
					Ident26=(Token)match(input,Ident,FOLLOW_Ident_in_expression_sub1255); 
					result = new Addr(Ident26.getText());
					}
					break;
				case 4 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:114:4: '!' Ident
					{
					match(input,39,FOLLOW_39_in_expression_sub1267); 
					Ident27=(Token)match(input,Ident,FOLLOW_Ident_in_expression_sub1269); 
					result = new ValPt(Ident27.getText());
					}
					break;
				case 5 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:115:4: TRUE
					{
					match(input,TRUE,FOLLOW_TRUE_in_expression_sub1280); 
					result = new True();
					}
					break;
				case 6 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:116:4: FALSE
					{
					match(input,FALSE,FOLLOW_FALSE_in_expression_sub1292); 
					result = new False();
					}
					break;
				case 7 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:117:4: 'NOT' e1= expression
					{
					match(input,48,FOLLOW_48_in_expression_sub1303); 
					pushFollow(FOLLOW_expression_in_expression_sub1307);
					e1=expression();
					state._fsp--;

					result = new NOT(e1);
					}
					break;
				case 8 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:118:4: NIL
					{
					match(input,NIL,FOLLOW_NIL_in_expression_sub1316); 
					result = new NIL();
					}
					break;
				case 9 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:119:4: CONS e1= expression '::' e2= expression
					{
					match(input,CONS,FOLLOW_CONS_in_expression_sub1327); 
					pushFollow(FOLLOW_expression_in_expression_sub1331);
					e1=expression();
					state._fsp--;

					match(input,44,FOLLOW_44_in_expression_sub1333); 
					pushFollow(FOLLOW_expression_in_expression_sub1337);
					e2=expression();
					state._fsp--;

					result = new CONS(e1, e2);
					}
					break;
				case 10 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:120:4: CAR e1= expression
					{
					match(input,CAR,FOLLOW_CAR_in_expression_sub1344); 
					pushFollow(FOLLOW_expression_in_expression_sub1348);
					e1=expression();
					state._fsp--;

					result = new CAR(e1);
					}
					break;
				case 11 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:121:4: CDR e1= expression
					{
					match(input,CDR,FOLLOW_CDR_in_expression_sub1357); 
					pushFollow(FOLLOW_expression_in_expression_sub1361);
					e1=expression();
					state._fsp--;

					result = new CDR(e1);
					}
					break;
				case 12 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:122:4: PAIR e1= expression
					{
					match(input,PAIR,FOLLOW_PAIR_in_expression_sub1370); 
					pushFollow(FOLLOW_expression_in_expression_sub1374);
					e1=expression();
					state._fsp--;

					result = new PAIR(e1);
					}
					break;
				case 13 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:123:4: '?(' e1= expression ')' e2= expression ':' e3= expression
					{
					match(input,47,FOLLOW_47_in_expression_sub1383); 
					pushFollow(FOLLOW_expression_in_expression_sub1386);
					e1=expression();
					state._fsp--;

					match(input,42,FOLLOW_42_in_expression_sub1387); 
					pushFollow(FOLLOW_expression_in_expression_sub1391);
					e2=expression();
					state._fsp--;

					match(input,43,FOLLOW_43_in_expression_sub1393); 
					pushFollow(FOLLOW_expression_in_expression_sub1397);
					e3=expression();
					state._fsp--;

					result = new Ternaire(e1, e2, e3);
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return result;
	}
	// $ANTLR end "expression_sub"



	// $ANTLR start "idents"
	// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:126:1: idents returns [Idents result] : ( Ident | Ident i= idents );
	public final Idents idents() throws  {
		Idents result = null;


		Token Ident28=null;
		Token Ident29=null;
		Idents i =null;

		try {
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:126:33: ( Ident | Ident i= idents )
			int alt15=2;
			int LA15_0 = input.LA(1);
			if ( (LA15_0==Ident) ) {
				int LA15_1 = input.LA(2);
				if ( (LA15_1==46) ) {
					alt15=1;
				}
				else if ( (LA15_1==Ident) ) {
					alt15=2;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 15, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 15, 0, input);
				throw nvae;
			}

			switch (alt15) {
				case 1 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:127:5: Ident
					{
					Ident28=(Token)match(input,Ident,FOLLOW_Ident_in_idents1423); 
					result = new Idents(); result.addIdent(Ident28.getText());
					}
					break;
				case 2 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:128:5: Ident i= idents
					{
					Ident29=(Token)match(input,Ident,FOLLOW_Ident_in_idents1462); 
					pushFollow(FOLLOW_idents_in_idents1466);
					i=idents();
					state._fsp--;

					result = new Idents(); result.addIdent(Ident29.getText()); result.addIdent(i);
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return result;
	}
	// $ANTLR end "idents"



	// $ANTLR start "dec"
	// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:131:1: dec returns [Dec result] : ( PROC Ident idents '=' prog | PROCREC Ident idents '=' prog | FUN Ident idents '=' expressions | FUNREC Ident idents '=' expressions | VAR Ident ( ':=' COPEN expression CCLOSE )? | PT Ident );
	public final Dec dec() throws  {
		Dec result = null;


		Token Ident30=null;
		Token Ident33=null;
		Token Ident36=null;
		Token Ident39=null;
		Token Ident42=null;
		Token Ident44=null;
		Idents idents31 =null;
		Prog prog32 =null;
		Idents idents34 =null;
		Prog prog35 =null;
		Idents idents37 =null;
		Expressions expressions38 =null;
		Idents idents40 =null;
		Expressions expressions41 =null;
		IExpression expression43 =null;

		try {
			// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:131:26: ( PROC Ident idents '=' prog | PROCREC Ident idents '=' prog | FUN Ident idents '=' expressions | FUNREC Ident idents '=' expressions | VAR Ident ( ':=' COPEN expression CCLOSE )? | PT Ident )
			int alt17=6;
			switch ( input.LA(1) ) {
			case PROC:
				{
				alt17=1;
				}
				break;
			case PROCREC:
				{
				alt17=2;
				}
				break;
			case FUN:
				{
				alt17=3;
				}
				break;
			case FUNREC:
				{
				alt17=4;
				}
				break;
			case VAR:
				{
				alt17=5;
				}
				break;
			case PT:
				{
				alt17=6;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 17, 0, input);
				throw nvae;
			}
			switch (alt17) {
				case 1 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:132:5: PROC Ident idents '=' prog
					{
					match(input,PROC,FOLLOW_PROC_in_dec1511); 
					Ident30=(Token)match(input,Ident,FOLLOW_Ident_in_dec1513); 
					pushFollow(FOLLOW_idents_in_dec1515);
					idents31=idents();
					state._fsp--;

					match(input,46,FOLLOW_46_in_dec1517); 
					pushFollow(FOLLOW_prog_in_dec1519);
					prog32=prog();
					state._fsp--;

					result = new Proc(Ident30.getText(), idents31, prog32, false);
					}
					break;
				case 2 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:133:5: PROCREC Ident idents '=' prog
					{
					match(input,PROCREC,FOLLOW_PROCREC_in_dec1534); 
					Ident33=(Token)match(input,Ident,FOLLOW_Ident_in_dec1536); 
					pushFollow(FOLLOW_idents_in_dec1538);
					idents34=idents();
					state._fsp--;

					match(input,46,FOLLOW_46_in_dec1540); 
					pushFollow(FOLLOW_prog_in_dec1542);
					prog35=prog();
					state._fsp--;

					result = new Proc(Ident33.getText(), idents34, prog35, true);
					}
					break;
				case 3 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:134:5: FUN Ident idents '=' expressions
					{
					match(input,FUN,FOLLOW_FUN_in_dec1554); 
					Ident36=(Token)match(input,Ident,FOLLOW_Ident_in_dec1556); 
					pushFollow(FOLLOW_idents_in_dec1558);
					idents37=idents();
					state._fsp--;

					match(input,46,FOLLOW_46_in_dec1560); 
					pushFollow(FOLLOW_expressions_in_dec1562);
					expressions38=expressions();
					state._fsp--;

					result = new Fun(Ident36.getText(), idents37, expressions38, false );
					}
					break;
				case 4 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:135:5: FUNREC Ident idents '=' expressions
					{
					match(input,FUNREC,FOLLOW_FUNREC_in_dec1571); 
					Ident39=(Token)match(input,Ident,FOLLOW_Ident_in_dec1573); 
					pushFollow(FOLLOW_idents_in_dec1575);
					idents40=idents();
					state._fsp--;

					match(input,46,FOLLOW_46_in_dec1577); 
					pushFollow(FOLLOW_expressions_in_dec1579);
					expressions41=expressions();
					state._fsp--;

					result = new Fun(Ident39.getText(), idents40, expressions41, true );
					}
					break;
				case 5 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:136:5: VAR Ident ( ':=' COPEN expression CCLOSE )?
					{
					match(input,VAR,FOLLOW_VAR_in_dec1593); 
					Ident42=(Token)match(input,Ident,FOLLOW_Ident_in_dec1595); 
					result = new Var(Ident42.getText()); 
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:137:4: ( ':=' COPEN expression CCLOSE )?
					int alt16=2;
					int LA16_0 = input.LA(1);
					if ( (LA16_0==45) ) {
						alt16=1;
					}
					switch (alt16) {
						case 1 :
							// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:137:5: ':=' COPEN expression CCLOSE
							{
							match(input,45,FOLLOW_45_in_dec1608); 
							match(input,COPEN,FOLLOW_COPEN_in_dec1610); 
							pushFollow(FOLLOW_expression_in_dec1612);
							expression43=expression();
							state._fsp--;

							match(input,CCLOSE,FOLLOW_CCLOSE_in_dec1614); 
							((Var)result).setExpr(expression43);
							}
							break;

					}

					}
					break;
				case 6 :
					// C:\\Users\\asus Aurelien\\Java\\CL2013\\logo3.g:138:5: PT Ident
					{
					match(input,PT,FOLLOW_PT_in_dec1625); 
					Ident44=(Token)match(input,Ident,FOLLOW_Ident_in_dec1627); 
					result = new Pointer(Ident44.getText());
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return result;
	}
	// $ANTLR end "dec"

	// Delegated rules



	public static final BitSet FOLLOW_prog_in_start419 = new BitSet(new long[]{0x0000000000000000L});
	public static final BitSet FOLLOW_EOF_in_start421 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COPEN_in_prog465 = new BitSet(new long[]{0x000000BD7E1F8130L});
	public static final BitSet FOLLOW_commands_in_prog467 = new BitSet(new long[]{0x0000000000000100L});
	public static final BitSet FOLLOW_CCLOSE_in_prog469 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_command_in_commands503 = new BitSet(new long[]{0x0000000000000402L});
	public static final BitSet FOLLOW_COMMA_in_commands527 = new BitSet(new long[]{0x000000BD7E1F8030L});
	public static final BitSet FOLLOW_commands_in_commands531 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MOVE_in_command570 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_command572 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TURN_in_command599 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_command601 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PENUP_in_command626 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PENDOWN_in_command661 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IF_in_command694 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_command696 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_prog_in_command700 = new BitSet(new long[]{0x0000000000002002L});
	public static final BitSet FOLLOW_ELSE_in_command724 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_prog_in_command728 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WHILE_in_command762 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_command764 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_prog_in_command766 = new BitSet(new long[]{0x0000000000080002L});
	public static final BitSet FOLLOW_Ident_in_command786 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_dec_in_command796 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CALL_in_command834 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_Ident_in_command836 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expressions_in_command838 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Ident_in_command857 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_45_in_command859 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_command861 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_39_in_command882 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_Ident_in_command884 = new BitSet(new long[]{0x0000200000000000L});
	public static final BitSet FOLLOW_45_in_command886 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_command890 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_REPEAT_in_command903 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_command905 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_prog_in_command907 = new BitSet(new long[]{0x0000000000080002L});
	public static final BitSet FOLLOW_Ident_in_command926 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FOR_in_command936 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_Ident_in_command940 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_COMMA_in_command942 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_command946 = new BitSet(new long[]{0x0000000000000400L});
	public static final BitSet FOLLOW_COMMA_in_command948 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_command952 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_prog_in_command954 = new BitSet(new long[]{0x0000000000080002L});
	public static final BitSet FOLLOW_Ident_in_command966 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_THROW_in_command976 = new BitSet(new long[]{0x0000000000080002L});
	public static final BitSet FOLLOW_Ident_in_command988 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BREAK_in_command1002 = new BitSet(new long[]{0x0000000000080002L});
	public static final BitSet FOLLOW_Ident_in_command1014 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TRY_in_command1028 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_prog_in_command1037 = new BitSet(new long[]{0x0000000000000080L});
	public static final BitSet FOLLOW_CATCH_in_command1043 = new BitSet(new long[]{0x0000000000081000L});
	public static final BitSet FOLLOW_Ident_in_command1046 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_prog_in_command1057 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_in_expressions1084 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expressions_in_expressions1122 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_expression_sub_in_expression1173 = new BitSet(new long[]{0x0000000000800002L});
	public static final BitSet FOLLOW_Op_in_expression1182 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_expression1186 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Num_in_expression_sub1213 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Ident_in_expression_sub1224 = new BitSet(new long[]{0x0000020000000002L});
	public static final BitSet FOLLOW_41_in_expression_sub1234 = new BitSet(new long[]{0x0001858201684A40L});
	public static final BitSet FOLLOW_expressions_in_expression_sub1237 = new BitSet(new long[]{0x0000040000000000L});
	public static final BitSet FOLLOW_42_in_expression_sub1238 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_40_in_expression_sub1253 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_Ident_in_expression_sub1255 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_39_in_expression_sub1267 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_Ident_in_expression_sub1269 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_TRUE_in_expression_sub1280 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FALSE_in_expression_sub1292 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_48_in_expression_sub1303 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_expression_sub1307 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NIL_in_expression_sub1316 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CONS_in_expression_sub1327 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_expression_sub1331 = new BitSet(new long[]{0x0000100000000000L});
	public static final BitSet FOLLOW_44_in_expression_sub1333 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_expression_sub1337 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CAR_in_expression_sub1344 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_expression_sub1348 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CDR_in_expression_sub1357 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_expression_sub1361 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PAIR_in_expression_sub1370 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_expression_sub1374 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_47_in_expression_sub1383 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_expression_sub1386 = new BitSet(new long[]{0x0000040000000000L});
	public static final BitSet FOLLOW_42_in_expression_sub1387 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_expression_sub1391 = new BitSet(new long[]{0x0000080000000000L});
	public static final BitSet FOLLOW_43_in_expression_sub1393 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_expression_sub1397 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Ident_in_idents1423 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_Ident_in_idents1462 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_idents_in_idents1466 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PROC_in_dec1511 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_Ident_in_dec1513 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_idents_in_dec1515 = new BitSet(new long[]{0x0000400000000000L});
	public static final BitSet FOLLOW_46_in_dec1517 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_prog_in_dec1519 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PROCREC_in_dec1534 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_Ident_in_dec1536 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_idents_in_dec1538 = new BitSet(new long[]{0x0000400000000000L});
	public static final BitSet FOLLOW_46_in_dec1540 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_prog_in_dec1542 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FUN_in_dec1554 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_Ident_in_dec1556 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_idents_in_dec1558 = new BitSet(new long[]{0x0000400000000000L});
	public static final BitSet FOLLOW_46_in_dec1560 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expressions_in_dec1562 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FUNREC_in_dec1571 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_Ident_in_dec1573 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_idents_in_dec1575 = new BitSet(new long[]{0x0000400000000000L});
	public static final BitSet FOLLOW_46_in_dec1577 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expressions_in_dec1579 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_VAR_in_dec1593 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_Ident_in_dec1595 = new BitSet(new long[]{0x0000200000000002L});
	public static final BitSet FOLLOW_45_in_dec1608 = new BitSet(new long[]{0x0000000000001000L});
	public static final BitSet FOLLOW_COPEN_in_dec1610 = new BitSet(new long[]{0x0001818201684A40L});
	public static final BitSet FOLLOW_expression_in_dec1612 = new BitSet(new long[]{0x0000000000000100L});
	public static final BitSet FOLLOW_CCLOSE_in_dec1614 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PT_in_dec1625 = new BitSet(new long[]{0x0000000000080000L});
	public static final BitSet FOLLOW_Ident_in_dec1627 = new BitSet(new long[]{0x0000000000000002L});
}
